// 插件 commandHelper.ts（适配组合式 store）
import { AxiosRequestConfig } from 'axios';
import type { Response } from "./api/index";
import { useDeviceStore } from './store/deviceStore';

// 显式导出 CommandSender 类型（关键修复）
export type CommandSender<Payload, Return> = (cmd: string, payload?: Payload) => Return | Promise<Return>;

export function createCommand<
  D extends Record<string, any> = Record<string, any>,
  R = void
>(
  moduleId: string,
  fixedParams?: any
) {
  return async function (
    data?: D,
    params?: any,
    config: AxiosRequestConfig = {}
  ): Promise<Response<R>> {
    // 1. 获取组合式 store 实例
    const calibStore = useDeviceStore();
    // 2. 从 store 中获取 sendCalibCmd（组合式 store 直接访问 .value）
    const sendDeviceCmd = calibStore.sendDeviceCmd;

    // 校验：确保资源已初始化
    if (!sendDeviceCmd) {
      throw new Error("sendDeviceCmd 未在 Pinia 中初始化，请检查插件根组件是否正常挂载");
    }

    // 3. 组装参数并发送命令（逻辑不变）
    const commandPayload = {
      moduleId,
      fixedParams,
      data,
      params: { ...fixedParams, ...params },
      config
    };
    const result = await sendDeviceCmd("execute", commandPayload);
    return result as Response<R>;
  };
}